from django.shortcuts import render

# Create your views here.
from rest_framework.response import Response

from goods.models import SKU
from goods.serializers import HostSKUSerializer

"""
获取热销产品
前端应该传递一个分类id，我们接收这个id
根据分类id进行查询，对商品进行排序，返回两个数据
对数据进行序列化操作，返回字典数据
返回响应

请求方式    GET
请求路径    /goods/categories/(?P<category_id>\d+)/hotskus/
请求参数　　分类id
返回响应　　对应分类的热销产品的信息

"""

from rest_framework.views import APIView

#
# class HostSKUView(APIView):
#     """
#     商品热销获取，使用一级视图实现
#     """
#     def get(self, requser, category_id):
#         #  获取参数，已经从路径中获取到对应的分类id
#         #  根据分类进行查询，并且排序
#         #  按照分类id获取到对应的商品，并且是已经上架的商品，然后按照销量进行降序排序，截取两个
#         hostsku = SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]
#         #  创建序列化器进行序列化操作
#         serializer = HostSKUSerializer(hostsku, many=True)
#         #  返回响应
#         return Response(serializer.data)


from  rest_framework.generics import ListAPIView


class HostSKUListAPIView(ListAPIView):
    """
    热销商品使用三级视图实现
    """
    #  如果在setting里面设置了分页信息，那么表示所有的有分页的都用该分页方式，所以需要设置分页属性
    #  设置分页等于None
    pagination_class = None

    serializer_class = HostSKUSerializer

    def get_queryset(self):
        """
        重写get_queryset方法
        从self中获取分类id
        返回查询结果集
        """
        category_id = self.kwargs['category_id']
        return SKU.objects.filter(category_id=category_id, is_launched=True).order_by('-sales')[:2]


"""
商品列表展示，继承三级视图ListAPIView
前端传递分类id，分页数，每页展示多少条数据，排序方式
创建序列化器
设置查询结果集
设置分页属性


请求方式    GET
请求路径    /goods/categories/(?P<category_id>\d+)/skus/?page=xxx&page_size=xxx&ordering=xxx
请求参数　　 category_id(分类id)  page(分页页数) page_size(分页数量) ordering(排序方式)
返回响应　　返回查询商品的信息

"""
#  排序
from rest_framework.filters import OrderingFilter
from utils.pagination import StandardResultsSetPagination


class SKUListView(ListAPIView):
    """商品列表展示，根据用户的点击获取不同的数据"""
    #  定义多种排序
    filter_backends = [OrderingFilter]
    #  默认根据创建时间排序　,用户可以根据价格　和人气进行排序
    ordering_fields = ['create_time', 'price', 'sales']

    #  定义序列化器
    serializer_class = HostSKUSerializer

    #  设置分页查询类
    # pagination_class = StandardResultsSetPagination

    #  重写返回结果查询集
    def get_queryset(self):
        category_id = self.kwargs['category_id']
        return SKU.objects.filter(category_id=category_id, is_launched=True)


"""
搜索原理：把数据进行分词处理，对分词信息进行记录
让haystack帮我们实现搜索功能
配置信息
生成索引
搜索
"""

from .serializers import SKUIndexSerializer
from drf_haystack.viewsets import HaystackViewSet


class SKUSearchViewSet(HaystackViewSet):
    """
    SKU搜索
    """
    # pagination_class = None
    #  索引的模型类
    index_models = [SKU]

    #  序列器
    serializer_class = SKUIndexSerializer
